/*
 * main.cpp
 *
 */

#include <iostream>
#include "Server.h"
#include "ExitListener.h"
#include "../common/LogFile.h"
#include "../common/ServerConfig.h"

int main(int argc, char* argv[]) {
	try {
		// Levanto la configuración del XML
		ServerConfig config("config.xml");

		// Inicio el archivo de log
		std::string dir(argv[0]);
		size_t lastSlash = dir.find_last_of('/');
		if(lastSlash != std::string::npos)
			dir = dir.substr(0, lastSlash + 1);
		//todo tomar dir del server config
		LogFile logFile(dir, true);

		// Inicio el server
		Server server(config, logFile);
		server.start();

		logFile.addInfo("Servidor iniciado.");

		// Espero evento de salida
		ExitListener exitListener(argc, argv, config.getCtrlPort(), logFile);
		exitListener.waitForExitEvent();

		// Detengo al server
		server.shutdown();
		server.join();

		logFile.addInfo("Servidor cerrado.");
	}
	catch (const LogFileException& e) {
		// No se pudo abrir el archivo para escritura
		std::cout << e.what() << std::endl;
		return 1;
	}
	catch (...){
		std::cout << "Salida por excepción no contemplada.\n";
		return 1;
	}
	return 0;
}
